<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
// [js] 说说bind、call、apply的区别？并手写实现一个bind的方法
 Function.prototype.myCall = function demo (context = window) {
   context.fn = this;
   var args = [...arguments].slice(1)
   var reslut = context.fn(...args)

   // 执行完后干掉
   delete context.fn
   return reslut;
 }
//  myCall()
// call() 和 apply() 作用都是改变 this 的指向，区别是传参的方式不同。除了第一个参数外，call() 可以接收一个参数列表，apply() 只接受一个参数数组。 bind() 绑定完之后返回一个新的函数，不执行。call() 和 apply() 作用都是改变 this 的指向，区别是传参的方式不同。除了第一个参数外，call() 可以接收一个参数列表，apply() 只接受一个参数数组。 bind() 绑定完之后返回一个新的函数，不执行。

// bind
// bind(context,arguments) 返回一个函数
// call
// call(context,arg1,arg2...) 指定作用域 同时执行函数
// apply
// apply(context,args) 指定作用域 同时执行函数，后面的参数是数组

Function.prototype.myCall(context, ...args){
  return function () {
    return this.apply(context,args)
  }
}
// https://www.runoob.com/w3cnote/js-call-apply-bind.html
  </script>

</body>

</html>